#ifndef __KEY_H
#define __KEY_H

#include "typedefs.h"

#ifdef DISPLAY_12864
#define KEY_MATRIX_GPIO_PORT									GPIOD
#define KEY_MATRIX_ROW1_GPIO_PIN								GPIO_Pin_11
#define KEY_MATRIX_ROW2_GPIO_PIN								GPIO_Pin_10
#define KEY_MATRIX_ROW3_GPIO_PIN								GPIO_Pin_9
#define KEY_MATRIX_ROW4_GPIO_PIN								GPIO_Pin_8
#define KEY_MATRIX_COLUMN1_GPIO_PIN								GPIO_Pin_15
#define KEY_MATRIX_COLUMN2_GPIO_PIN								GPIO_Pin_14
#define KEY_MATRIX_COLUMN3_GPIO_PIN								GPIO_Pin_13
#define KEY_MATRIX_COLUMN4_GPIO_PIN								GPIO_Pin_12

#define KEY_INDEPENDENT_GPIO_PORT								GPIOG
#define KEY_INDEPENDENT_F1_GPIO_PIN								GPIO_Pin_12
#define KEY_INDEPENDENT_F2_GPIO_PIN								GPIO_Pin_13
#define KEY_INDEPENDENT_F3_GPIO_PIN								GPIO_Pin_14
#define KEY_INDEPENDENT_F4_GPIO_PIN								GPIO_Pin_15
#endif

#ifdef DISPLAY_1602
#endif

#ifdef DISPLAY_DIGITRON
#define KEY_MATRIX_GPIO_PORT									GPIOE
#define KEY_MATRIX_ROW1_GPIO_PIN								GPIO_Pin_0
#define KEY_MATRIX_ROW2_GPIO_PIN								GPIO_Pin_1
#define KEY_MATRIX_ROW3_GPIO_PIN								GPIO_Pin_2
#define KEY_MATRIX_ROW4_GPIO_PIN								GPIO_Pin_3
#define KEY_MATRIX_COLUMN1_GPIO_PIN								GPIO_Pin_4
#define KEY_MATRIX_COLUMN2_GPIO_PIN								GPIO_Pin_5
#define KEY_MATRIX_COLUMN3_GPIO_PIN								GPIO_Pin_6
#define KEY_MATRIX_COLUMN4_GPIO_PIN								GPIO_Pin_7

#define KEY_INDEPENDENT_GPIO_PORT								GPIOD
#define KEY_INDEPENDENT_F1_GPIO_PIN								GPIO_Pin_12
#define KEY_INDEPENDENT_F2_GPIO_PIN								GPIO_Pin_13
#define KEY_INDEPENDENT_F3_GPIO_PIN								GPIO_Pin_14
#define KEY_INDEPENDENT_F4_GPIO_PIN								GPIO_Pin_15
#endif

typedef uint8_t (*key_read)(void);

typedef struct{
	rvwv_f init;
	key_read read;
}key_opr_t;

key_opr_t* Key_GetOpr(void);

#endif
